Data buses are increasingly used to connect devices to a host computer system. While the data buses provide the ability to easily attach numerous, disparate devices to a host, the flexibility comes at cost of connection speed as direct, dedicated connections are often much faster than data bus connections. This drawback of decreased connection speed, or bandwidth, is especially apparent when there are large amounts of data being routinely transferred over the data bus.
Typically, a connected storage device receives data write requests requesting the device to write data to certain specified locations on the storage device, referred to as logical block addresses (LBAs). These requests are queued in a request queue as they are received. When the write mechanism of the data storage device is available, the device sends a request to the host to transmit the data associated with the next data write request pending in the queue. When that data are received (or, alternatively, when the data are written), a status message is sent to the host indicating that that data write request has been completed. During busy periods, multiple data write requests may be received and build up in the request queue while data associated with a single data write request is being transferred. If the request queue fills up, no more data write requests will be accepted until room is made in the queue by completing the data transfer associated with the current data write request and the data transfer for the next data write request in the queue is initiated. Therefore, the ultimate speed of the process is limited by the amount of data that ultimately has to be sent to the connected device and the speed of the connecting bus.
The above-described data transfer process occurs even though the pending data write requests in the queue, as often occurs in a data storage device formatting process, may overwrite data from earlier data write requests also pending in the queue. In some applications and processes, it is common for multiple data write requests to be sent to the data storage device that overwrite some or all of the LBAs associated with prior-transmitted data write requests. For example, the host computer may continuously send updated formatting data to be written to the same LBAs on the data storage device during the formatting process. In such data intensive processes, like formatting, wherein the same LBAs on the data storage device are being continuously updated with new data, the fact that the data from each data write request have to be transmitted to the device, just to be overwritten by the next data write request, inefficiently limits the speed of the formatting process.
Accordingly there is a need for increasing the efficiency of transferring overlapping data over a data bus. The present invention provides a solution to this and other problems, and offers other advantages over the prior art.